package com.zhouwen.ssm.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 区别
 * <p>
 * 使用范围
 * 过滤器是servlet规范中的一部分，任何Java Web工程都可以使用
 * 拦截器是SpringMVC框架自己的，只有使用了SpringMVC框杂的工程才能用
 * <p>
 * 拦截范围
 * 过滤器在url-pattern中配置了/*之后，可以对所有要访问的资源拦截
 * 拦截器只会拦截访问的控制器方法，如果访问的是jsp,html,css,image或者js是不会进行拦截的
 * <p>
 * 自定义拦截器很简单，只有如下三步:
 * 1、创建拦截器类实现HandlerInterceptor接口
 * 2、配置拦截器
 * 3、测试拦截器的拦截效果
 */
public class MyInterceptor implements HandlerInterceptor {

    /**
     * 在目标方法执行之前执行
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("pre...");
        return true;
        /*String zw = request.getParameter("zw");
        if ("yes".equals(zw)) {
            return true;
        } else {
            request.getRequestDispatcher("/index.jsp").forward(request,response);
            return false;
        }*/

    }

    /**
     * 在目标方法执行之后，视图对象返回之前执行
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        modelAndView.addObject("zw","wenzhouaaaaaa");
        System.out.println("post...");
    }

    /**
     * 在整个流程都执行完毕后 执行
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("after...");
    }
}
